import { useRef } from "react";
import Cell from "./Cell";
import cloneDeep from "lodash/cloneDeep";
import { useForm } from "../../framework/common/context/metadata-context";

export default function ({rowIndex, row, scale, firstRow,group,groupRef }) {
  //这里需要拿到firstRow 因为设计时如果cell里面没有组件，cell width不会计算，只会记录在firstRow里面了
  //运行时行的长度是1040
  //设计时行的默认长度是744
  const rowRef = useRef(null);
  const {data:tplData}= useForm()
  let mainField = `form.form_data.main.`;
  if (row.cols) {

    //空字段code赋值
    row.cols.forEach((col,colIndex) => {
      let code=col?.data?.[0]?.code;
      if(code===undefined){
        //空白列
        let emptyCode=`empty_____${(group.code||group.id)}.${rowIndex}.${colIndex}`
        if(col.data==undefined ){
          col.data=[{code:emptyCode}] 
        }
        else
        {
          if(col.data.length===0){
            col.data.push({code:emptyCode})
          }
          else
          {
            col.data[0].code=emptyCode
          }
        }
      }
    });
    


    //打印模式删除
    if(tplData?.hideInfo?.delete_field_arr?.length>0){
      //shit一样的数据结构
      row.cols.forEach(col => {
        let code=col?.data?.[0]?.code;
        if(tplData.hideInfo.delete_field_arr.includes( code)){
          if(col.isHidden!==true){
            col.isHidden =true;
            tplData.hideTrackingInfo.add(col);
          }
        }
      });
    
    }

    //如果是空行，就不显示
    let isEmptyRow = row.cols.every((col) => col.isEmpty === true || col.isHidden === true);
    if (isEmptyRow) {
      return null;
    }

    //过滤掉被合并了的col
    let originCols = row.cols.filter((col) => col.mergeHide !== true);
    let cols = null;
    let hiddenCol = originCols.find((col) => col.isHidden === true);
    if (hiddenCol) {
      cols = cloneDeep(originCols);
      //最后的需要显示的列，比如A B C3列，A列步骤隐藏，B列显示，lastCol = B列
      let lastCol;
      //隐藏列的个数
      let hiddenCount = 0;
      //调整列合并
      function justifyCol(col) {
        if (hiddenCount > 0) {
          if (!col.colspan) {
            col.colspan = 1;
          }
          if (col.isEmpty === true) {
            col.colspan = col.colspan + hiddenCount * 2;
          } else {
            col.colspan = col.colspan + hiddenCount;
          }
          hiddenCount = 0;
        }
      }
      //遍历每一列，如果有隐藏列进行合并
      for (let index = cols.length - 1; index >= 0; index--) {
        const col = cols[index];
        if (col.isHidden === true) {
          hiddenCount += col.colspan || 1;
        } else {
          lastCol = col;
          justifyCol(col);
        }
      }
      lastCol && justifyCol(lastCol);
      cols = cols.filter((c) => c.isHidden !== true);
    } else {
      cols = originCols;
    }


    return (
      <tr ref={rowRef}>
        {cols.map((col, index) => {
          let cellProperties = {};
          if (col.mergeHide === true) {
            //如果当前是被合并Cell
            return null;
          }
          let width;
          //
          if (col.colspan > 1) {//如果列配置了左右合并，或者当前列前后存在隐藏列时，当前列的colspan会>1（正常为1）
            
            cellProperties.colSpan = col.colspan;
            //如果当前列是合并Cell
            //                   "rowspan":1,
            //                   "colspan":2,
            //                   "minCell":{
            //                       "row":1,
            //                       "col":0
            //                   },
            //                   "maxCell":{
            //                       "row":1,
            //                       "col":1
            //                   },
            //                   "mergeW":744
            width = col.mergeW;
            
            if(width === undefined){//只有在表单设计器操作了左右合并，才存在mergeW属性，其他为undefined，宽度属性重置为当前列的宽度
              width = col.style?.width;
            }
          } else {
            width = col.style?.width;
            // if (width) {
            //   width = width;
            // }
          }
          if (col.rowspan > 1) cellProperties.rowSpan = col.rowspan;

          return <Cell group={group} groupRef={groupRef}  mainField={mainField} scale={scale} key={index} width={width} cell={col} {...cellProperties}></Cell>;
        })}
      </tr>
    );
  }
  return null;
}
